import os
import sys
import time
from colorama import Fore, Back, Style, init
init(autoreset=True) 


def progress_bar(current, total, bar_length=150):#进度条
    percent = float(current) / total
    arrow = '=' * int(round(percent * bar_length) - 1) + '>'
    spaces = ' ' * (bar_length - len(arrow))
    sys.stdout.write(f"\r工具加载中: [{arrow + spaces}] {int(round(percent * 100))}%")
    sys.stdout.flush()

def mainmenu():
    print(Fore.BLUE + '\n     WESE的安卓命令行搞机工具箱')
    print(Fore.RED + Back.CYAN + '[1] 基础内容    [2] 应用管理 \n[3] 无线连接设备[4] 文件操作 \n[5] 日志与调试  [6] 模拟按键事件\n[7] 备份        [8] 系统信息\n[about] 关于  [00]高级命令\n[exit] 退出工具 \n ')

    mode = input(Fore.GREEN + '选择一种分类:')

    if(mode == '1'):
        menu1()
    if(mode == '2'):
        menu2()
    if(mode == '3'):
        print(Fore.BLUE + Back.WHITE + '不会连接?打开网址 https://www.bilibili.com/opus/658549508760666133 查看教程! 帖子来源:晨钟酱offical')
        ip = input(Fore.BLUE + Back.GREEN + 'ip地址')
        os.system('adb connect ' + ip + ':5555')
    if(mode == '4'):
        menu4()
    if(mode == '5'):
        menu5()
    if(mode == '6'):
        menu6()
    if(mode == '7'):
        menu7()
    if(mode == '8'):
        menu8()
    if(mode == 'about'):
        menu9()
    if(mode == '00'):
        mode_dev()
    if(mode == 'exit'):
        quit()

def menu1():
    while True:
        print(Fore.BLUE + ('-' * 99 ))
        print(Fore.BLUE + Back.WHITE + '基础内容')
        print(Fore.RED + Back.BLUE + '[1] 已连接设备 [2] 无线连接 \n[3] 开放5555端口  [4] 重启设备 \n[5] Fastboot  [0]返回上级菜单')
        mode_small = input(Fore.BLUE + Back.GREEN  + '选择子分类:')
        if(mode_small == "1"):
            os.system('adb devices')
        if(mode_small == '2'):
            print(Fore.BLUE + Back.WHITE + '不会连接?打开网址 https://www.bilibili.com/opus/658549508760666133 查看教程! 帖子来源:晨钟酱offical')
            ip = input(Fore.BLUE + Back.GREEN + 'ip地址')
            os.system('adb connect ' + ip + ':5555')
        if(mode_small == '3'):
            os.system('adb tcpip 5555')
        if(mode_small == '4'):
            os.system('adb reboot')
        if(mode_small == '5'):
            os.system('adb reboot bootloader')
        if(mode_small == '0'):
            mainmenu()

def menu2():
    while True:
        print(Fore.BLUE + ('-' * 99 ))
        print(Fore.BLUE + Back.WHITE + '应用管理')
        print(Fore.RED + Back.BLUE + '[1] 已安装应用 [2] 当前应用 \n[3] 禁用  [4] 启用 \n[5] 安装 [6] 卸载 \n[7] 隐藏 [8] 取消隐藏 \n[9] 启动应用 [10] 清除应用数据 \n [0]返回上级菜单')
        mode_small = input(Fore.BLUE + Back.GREEN  + '选择子分类:')
        if(mode_small == "1"):
            os.system('adb shell pm list packages')
        if(mode_small == '2'):
            os.system('adb shell dumpsys activity activities')
        if(mode_small == '3'):
            packagename = input('请输入包名:')
            if(input('二次确认:您确定要紫菜这个软件吗? \n是:y 否:n') == 'y'):
                os.system('adb shell pm disable ' + packagename)
            print('操作完成')
        if(mode_small == '4'):
            packagename = input('请输入包名:')
            os.system('adb shell pm enable ' + packagename)
        if(mode_small == '5'):
            packagename = input('请先将安装包装入软件目录,然后输入包名:')
            os.system('adb install ' + packagename)
        if(mode_small == '6'):
            packagename = input('请输入包名:')
            if(input('二次确认:您确定要紫菜这个软件吗? \n是:y 否:n') == 'y'):
                if(input('您要保留这个软件的数据吗? \n是:y 否:n') == 'y'):
                    os.system('adb uninstall -k ' + packagename)
                else:
                    os.system('adb uninstall ' + packagename)
        if(mode_small == '7'):
            packagename = input('请输入包名:')
            os.system('adb shell pm hide ' + packagename)
        if(mode_small == '8'):
            packagename = input('请输入包名:')
            os.system('adb shell pm unhide ' + packagename)
        if(mode_small == '9'):
            packagename = input('请输入包名或activity:')
            os.system('adb shell am start -n ' + packagename)
        if(mode_small == '10'):
            packagename = input('请输入包名:')
            if(input('二次确认:您确定要清除这个软件的数据吗? \n是:y 否:n') == 'y'):
                os.system('adb shell pm clear ' + packagename)
        if(mode_small == '0'):
            mainmenu()

def menu4():
    while True:
        print(Fore.BLUE + ('-' * 99 ))
        print(Fore.BLUE + Back.WHITE + '文件操作')
        print(Fore.RED + Back.BLUE + '[1] 列出目录内容 [2] 切换目录 \n[3] 创建目录  [4] 删除文件 \n[5] 上传文件到设备 [6] 下载文件到电脑 \n[7] 	查看文件内容 [0]返回上级菜单')
        mode_small = input(Fore.BLUE + Back.GREEN  + '选择子分类:')
        if(mode_small == "1"):
            os.system('adb shell ls')
        if(mode_small == '2'):
            path1 = input('路径为:')
            os.system('adb shell cd ' + path1)
        if(mode_small == '3'):
            name = input('目录名:')
            os.system('adb shell mkdir ' + name)
        if(mode_small == '4'):
            name = input('请输入文件名:')
            if(input('二次确认:您确定要紫菜这个文件吗? \n是:y 否:n') == 'y'):
                os.system('adb shell rm ' + name)
        if(mode_small == '5'):
            name = input('请先将文件装入软件目录,然后输入文件名:')
            os.system('adb push ' + name + ' /storage/emulated/0/weseupload')
        if(mode_small == '6'):
            name = input('请先将文件装入weseupload目录,然后输入文件名:')
            os.system('adb pull /storage/emulated/0/weseupload ' + name)
        if(mode_small == '7'):
            name = input('请输入文件名:')
            os.system('adb shell cat ' + name)
        if(mode_small == '0'):
            mainmenu()

def menu5():
    while True:
        print(Fore.BLUE + ('-' * 99 ))
        print(Fore.BLUE + Back.WHITE + '日志与调试')
        print(Fore.RED + Back.BLUE + '[1] 日志 [2] 清除日志 \n[3] 保存日志  [4] 生成完整 Bug 报告 \n[5] 查看系统状态 [6] 屏幕截图 \n[7] 屏幕录制（需Android 4.4+） [0]返回上级菜单')
        mode_small = input(Fore.BLUE + Back.GREEN  + '选择子分类:')
        if(mode_small == "1"):
            os.system('adb logcat')
        if(mode_small == '2'):
            os.system('adb logcat -c')
        if(mode_small == '3'):
            name = input('目录名:')
            os.system('adb logcat -d > log.txt')
            print('已保存')
        if(mode_small == '4'):
            os.system('adb bugreport')
        if(mode_small == '5'):
            os.system('adb shell dumpstate')
        if(mode_small == '6'):
            os.system('adb shell screencap -p /sdcard/screen.png')
            os.system('adb pull /sdcard/screen.png ./')
            print('截图完成')
        if(mode_small == '7'):
            os.system('adb shell screenrecord /sdcard/video.mp4')
            print('录屏完成')
        if(mode_small == '0'):
            mainmenu()

def menu6():
    while True:
        print(Fore.BLUE + ('-' * 99 ))
        print(Fore.BLUE + Back.WHITE + '模拟按键事件')
        print(Fore.RED + Back.BLUE + '[1] 电源 [2] 音量+ \n[3] 音量-  [4] 返回 \n[5] 多任务 [6] 最小化 \n[7] 输入文字 [0]返回上级菜单')
        mode_small = input(Fore.BLUE + Back.GREEN  + '选择子分类:')
        if(mode_small == "1"):
            os.system('adb shell input keyevent 26')
        if(mode_small == '2'):
            os.system('adb shell input keyevent 24')
        if(mode_small == '3'):
            os.system('adb shell input keyevent 25')
        if(mode_small == '4'):
            os.system('adb shell input keyevent 4')
        if(mode_small == '5'):
            os.system('adb shell input keyevent 187')
        if(mode_small == '6'):
            os.system('adb shell input keyevent 3')
        if(mode_small == '7'):
            text1 = input('将要输入的内容:')
            os.system('adb shell input text ' + '"' + text1 + '"')
            print('输入完成')
        if(mode_small == '0'):
            mainmenu()

def menu7():
    while True:
        print(Fore.BLUE + ('-' * 99 ))
        print(Fore.BLUE + Back.WHITE + '备份')
        print(Fore.RED + Back.BLUE + '[1] 备份 [2] 恢复 \n[0]返回上级菜单')
        mode_small = input(Fore.BLUE + Back.GREEN  + '选择子分类:')
        if(mode_small == '0'):
            mainmenu()

def menu8():
    while True:
        print(Fore.BLUE + ('-' * 99 ))
        print(Fore.BLUE + Back.WHITE + '系统信息')
        print(Fore.RED + Back.BLUE + '[0]返回上级菜单')
        mode_small = input(Fore.BLUE + Back.GREEN  + '选择子分类:')
        print('系统总信息')
        os.system('adb shell getprop')
        print('安卓版本')
        os.system('adb shell getprop ro.build.version')
        print('屏幕分辨率')
        os.system('adb shell wm size')
        print('屏幕DPI')
        os.system('adb shell wm density')
        print('电池信息')
        os.system('adb shell dumpsys battery')
        print('CPU使用率')
        os.system('adb shell dumpsys cpuinfo')
        print('内存使用')
        os.system('adb shell dumpsys meminfo')
        print('储存空间')
        os.system('adb shell df')
        print('进程CPU占用')
        os.system('adb shell top')                                        
        if(mode_small == '0'):
            mainmenu()

def menu9():
    while True:
        print(Fore.BLUE + ('-' * 99 ))
        print(Fore.BLUE + Back.WHITE + '关于')
        print(Fore.RED + Back.BLUE + '[1] 关于软件 [2] 日志 \n[3] 关于作者 [4] 重新加载 \n[0]返回上级菜单')
        mode_small = input(Fore.BLUE + Back.GREEN  + '选择子分类:')
        if(mode_small == "1"):
            print(Fore.BLUE + Back.LIGHTWHITE_EX + 'ANDROID DEBUG BRIDGR TOOLS v1.0 \n   mode:commandline mode')
            print(Fore.BLACK + Back.LIGHTWHITE_EX + 'CREATED BY WESE')
            os.system('adb version')
            print(Fore.BLACK + Back.LIGHTWHITE_EX + 'This version has 297 lines.')
        if(mode_small == '2'):
            os.system('adb logcat')
        if(mode_small == '3'):
            print(Fore.BLUE + Back.LIGHTWHITE_EX + 'wese --业余程序员 \n这是我的第一个大项目,希望各位喜欢.\n感谢晨钟酱offical的搞机工具箱为我产生的灵感. \n后续版本会增加oem解锁、格式化 data 分区、刷入recovery、刷入boot镜像、以 root 执行命令等内容，谢谢各位股东的支持（这可不是画饼项目） \n 因为作者是个中学生，所以假期可以实现大版本周更，小测试日更，上学断更[doge] \n 感谢各位选用此工具！')
            time.sleep(10)
            print(Fore.BLACK + Back.LIGHTWHITE_EX + '下一个版本将会实现：oem 快速解锁 、 刷入自定义recovery（作者主推twrp） 、 刷入boot分区 、格式化data分区 、 一键刷机（作者不负责） --以上内容安置在高级功能 - 刷机栏目；/n将网络功能开放')
            time.sleep(3)
            print(Fore.BLACK + Back.LIGHTBLUE_EX + '开源项目，人人可改。这是我们开发的程序，也是每个人可改的蓝本。希望所有用户可以将改好的程序上传至我们的gitee仓库（网址见即将上线的官网），共同开发这一工具箱。')
            time.sleep(4)
        if(mode_small == '4'):
            start()
        if(mode_small == '0'):
            mainmenu()

def mode_dev():
    text2 = '开发者模式可能会对您的手机造成不可逆的损伤,开启需要您的授权,输入\'我已认真阅读并知晓开发人员模式可能带来的后果,并对其负一切责任\'以授权.'
    if('我已认真阅读并知晓开发人员模式可能带来的后果,并对其负一切责任' == input(text2)):
        dev()
    else:
        print('授权失败')

def dev():
    while True:
        print(Fore.BLUE + ('-' * 99 ))
        print(Fore.BLUE + Back.WHITE + '网络管理')
        print(Fore.RED + Back.BLUE + '[1] 查看网络接口 [2] 查看网络连接 \n[3] 测试网络连通性  [4] 查看路由表 \n[5] 开启飞行模式 [6] 开启 Wi-Fi \n[7] 关闭 Wi-Fi [0]返回上级菜单')
        mode_small = input(Fore.BLUE + Back.GREEN  + '选择子分类:')
        if(mode_small == "1"):
            os.system('adb shell ifconfig')
        if(mode_small == '2'):
            os.system('adb shell netstat')
        if(mode_small == '3'):
            os.system('adb shell ping 192.168.0.1')
        if(mode_small == '4'):
            os.system('adb shell ip route')
        if(mode_small == '5'):
            os.system('adb shell settings put global airplane_mode_on 1')
        if(mode_small == '6'):
            os.system('adb shell svc wifi enable')
        if(mode_small == '7'):
            os.system('adb shell svc wifi disable')
        if(mode_small == '0'):
            mainmenu()


def start():
    for i in range(101):
        time.sleep(0.01)
        progress_bar(i, 100)

    os.chdir('D:\\魏群恩所有\搞机工具箱10.1.0')

    print(Fore.LIGHTWHITE_EX + Back.RED + '\n[warning]警告:本软件为ANDROID调试器,可能损害手机健康,对于因用户本人操作引起的后果,工作室概不负责! \n使用应用即同意以上协议')
    time.sleep(5)
    mainmenu()

start()